--字典

--字典声明
a={["name"]="我",["age"]=14,["1"]=5}

print(a["name"])

--第二种访问方式
print(a.name)
--print(a.1) ,不能是数字！

--修改
a["name"]="你"
print(a.name)

--新增
a["sex"]="男"
print(a.sex)

--删除
a["sex"]=nil
print(a.sex)

--遍历
for i,k in pairs(a) do
	print(i..k)
end 

--类和结构体
--lua中没有面向对象，需自己实现(用table)
student={
	--成员变量
	age=1,
	sex="男",
	--成员函数
	Up=function()
		--想要在表内步访问表本身的属性需要声明其属于谁，不能直接写
		print(student.age)
		print("我成长了")
	end,
	Learn=function(t)
		print(t.sex)
		print("学习")
	end

}

--有点像静态成员
print(student.age)
student.Up()

--第二种访问内部属性的方式
student.Learn(student)

--第三种,用冒号调用方法，会默认将调用者作为第一个参数传入
student:Learn()

--在表外声明表的变量和方法
student.name="他"
print(student.name)

student.speak=function()
	print("说话了")
end

student.speak()

--第三种函数声明
function student:speak2()
	--lua中self表示默认传入的第一个参数
	--self不是this
	print(self.name)
	print("再次说话")
end
student:speak2()
student.speak2(student)

--表的公共操作
t1={{age=1,name="123"},{age=2,name="345"}}

t2={name="我",sex=true}

--插入
table.insert(t1,t2) --t2插入t1内部
print(#t1)
print(t1[3].sex)

--remove移除最后一个索引的内容
table.remove(t1)
print(#t1)
print(t1[1])
print(t1[3])

--移除指定位置的元素
table.remove(t1,1)
print(t1[1].name)

--排序
t2={5,2,7,9,5}
table.sort(t2)
for _,v in pairs(t2) do
	print(v)
end

--降序排列,第二个是排序规则的函数
table.sort(t2,function(a,b)
	if a>b then
		return true
	end
end)
for _,v in pairs(t2) do
	print(v)
end

--拼接,用于拼接表中元素，返回字符串
tb={"123","456","789"}
str=table.concat(tb,";")
print(str)